package com.fpj.sat.vehicle_administrator.view;

import java.awt.Component;
import java.awt.Font;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;

import net.sourceforge.jdatepicker.impl.JDatePanelImpl;
import net.sourceforge.jdatepicker.impl.JDatePickerImpl;
import net.sourceforge.jdatepicker.impl.UtilDateModel;

import com.fpj.sat.vehicle_administrator.action.VehiculoAction;
import com.fpj.sat.vehicle_administrator.util.RegistroModel;
import com.fpj.sat.vehicle_administrator.util.Util;

public class VehiculoPanel extends JPanel{

	private static final long serialVersionUID = 362889171272845230L;
	private PrincipalFrame principal;
	private JLabel lblTitulo;
	private JLabel lblBusqueda;
	private JSeparator separador;
	private JLabel lblFechaBusqueda;
	private JLabel lblA;
	private UtilDateModel modelFechaBusquedaIni;
	private JDatePanelImpl datePanelFechaBusquedaIni; 
	private JDatePickerImpl dtFechaBusquedaIni;
	private UtilDateModel modelFechaBusquedaFin;
	private JDatePanelImpl datePanelFechaBusquedaFin; 
	private JDatePickerImpl dtFechaBusquedaFin;
	private JButton btnBuscar;
	private JScrollPane spTable;
	private JTable tblRegistros;
	private RegistroModel modelRegistros;
	private JButton btnAgregar;
	private JButton btnEditar;
	private JButton btnVerDetalle;
	private final String[] columnasRegistro = {"ID", "TITULO", "FECHA REGISTRO", "USUARIO"};
	
	public VehiculoPanel(PrincipalFrame principal) {
		this.principal = principal;
		inicializaPanel();
		inicializaComponentes();
	}

	private void inicializaPanel() {
		setLayout(null);
		setBounds(0, 0, Util.getAnchoPantalla(getToolkit().getScreenSize(), 0.8), Util.getAltoPantalla(getToolkit().getScreenSize(), 0.8));
	}

	private void inicializaComponentes() {
		lblTitulo = new JLabel("REGISTRO   DE   VEHICULOS");
		lblTitulo.setFont(new Font(lblTitulo.getFont().getFontName(), Font.BOLD, 18));
		lblTitulo.setBounds(Util.getPorcentaje(getWidth(), 0.5) - 180, 40, 290, 25);
		
		lblBusqueda = new JLabel("Busqueda");
		lblBusqueda.setBounds(50, 80, 70, 20);
		
		separador = new JSeparator(SwingConstants.HORIZONTAL);
		separador.setBounds(50, 102, getWidth() - 100, 5);
		
		lblFechaBusqueda = new JLabel("Fecha de Registro: ");
		lblFechaBusqueda.setBounds(80, 120, 120, 20);
		
		modelFechaBusquedaIni = new UtilDateModel();
		modelFechaBusquedaIni.setValue(new Date());
		datePanelFechaBusquedaIni = new JDatePanelImpl(modelFechaBusquedaIni);
		dtFechaBusquedaIni = new JDatePickerImpl(datePanelFechaBusquedaIni);
		dtFechaBusquedaIni.setBounds(220, 120, 150, 30);
		
		
		lblA = new JLabel("A");
		lblA.setBounds(380, 120, 10, 20);
		
		modelFechaBusquedaFin = new UtilDateModel();
		modelFechaBusquedaFin.setValue(new Date());
		datePanelFechaBusquedaFin = new JDatePanelImpl(modelFechaBusquedaFin);
		dtFechaBusquedaFin = new JDatePickerImpl(datePanelFechaBusquedaFin);
		dtFechaBusquedaFin.setBounds(400, 120, 150, 30);
		
		btnBuscar = new JButton("Buscar");
		btnBuscar.setBounds(Util.getPorcentaje(getWidth(), 0.86), 120, 100, 25);
		btnBuscar.addActionListener(new VehiculoAction(this, principal));
		
		modelRegistros = new RegistroModel(columnasRegistro, 0);
		tblRegistros = new JTable(modelRegistros);
		tblRegistros.setFillsViewportHeight(true);
		tblRegistros.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tblRegistros.getSelectionModel().addListSelectionListener(new VehiculoAction(this, principal));
		setearColumnsWidth();
		spTable = new JScrollPane(tblRegistros);
		spTable.setBounds(50, Util.getPorcentaje(getHeight(), 0.3), Util.getPorcentaje(getWidth(), 0.91), Util.getPorcentaje(getHeight(), 0.4));
		
		btnAgregar = new JButton("Agregar");
		btnAgregar.setBounds(Util.getPorcentaje(getWidth(), 0.046), Util.getPorcentaje(getHeight(), 0.8), 100, 25);
		btnAgregar.addActionListener(new VehiculoAction(this, principal));
		
		btnEditar = new JButton("Editar");
		btnEditar.setBounds(Util.getPorcentaje(getWidth(), 0.146), Util.getPorcentaje(getHeight(), 0.8), 100, 25);
		btnEditar.addActionListener(new VehiculoAction(this, principal));
		btnEditar.setEnabled(false);
		
		btnVerDetalle = new JButton("Ver Detalle");
		btnVerDetalle.setBounds(Util.getPorcentaje(getWidth(), 0.246), Util.getPorcentaje(getHeight(), 0.8), 100, 25);
		btnVerDetalle.addActionListener(new VehiculoAction(this, principal));
		btnVerDetalle.setEnabled(false);
		
		agregarComponentes(lblTitulo, lblBusqueda, separador, lblFechaBusqueda, 
				dtFechaBusquedaIni, lblA, dtFechaBusquedaFin, btnBuscar, spTable, btnAgregar, btnEditar, btnVerDetalle);
		
	}

	private void setearColumnsWidth() {
		DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    	renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
		for (int i = 0; i < columnasRegistro.length; i++) {
		    if (i == 0) {
		    	tblRegistros.getColumn(columnasRegistro[i]).setCellRenderer( renderer);
		    	tblRegistros.getColumn(columnasRegistro[i]).setMaxWidth(40);
		    } else if(i == 1){
		    	tblRegistros.getColumn(columnasRegistro[i]).setMaxWidth(420);
		    }else{
		    	tblRegistros.getColumn(columnasRegistro[i]).setCellRenderer( renderer);
		    	tblRegistros.getColumn(columnasRegistro[i]).setMaxWidth(220);
		    }
		}
	}

	private void agregarComponentes(Component...componentes){
		for(Component component: componentes){
			add(component);
		}
		
	}

	public UtilDateModel getModelFechaBusquedaIni() {
		return modelFechaBusquedaIni;
	}

	public void setModelFechaBusquedaIni(UtilDateModel modelFechaBusquedaIni) {
		this.modelFechaBusquedaIni = modelFechaBusquedaIni;
	}

	public JDatePanelImpl getDatePanelFechaBusquedaIni() {
		return datePanelFechaBusquedaIni;
	}

	public void setDatePanelFechaBusquedaIni(
			JDatePanelImpl datePanelFechaBusquedaIni) {
		this.datePanelFechaBusquedaIni = datePanelFechaBusquedaIni;
	}

	public JDatePickerImpl getDtFechaBusquedaIni() {
		return dtFechaBusquedaIni;
	}

	public void setDtFechaBusquedaIni(JDatePickerImpl dtFechaBusquedaIni) {
		this.dtFechaBusquedaIni = dtFechaBusquedaIni;
	}

	public UtilDateModel getModelFechaBusquedaFin() {
		return modelFechaBusquedaFin;
	}

	public void setModelFechaBusquedaFin(UtilDateModel modelFechaBusquedaFin) {
		this.modelFechaBusquedaFin = modelFechaBusquedaFin;
	}

	public JDatePanelImpl getDatePanelFechaBusquedaFin() {
		return datePanelFechaBusquedaFin;
	}

	public void setDatePanelFechaBusquedaFin(
			JDatePanelImpl datePanelFechaBusquedaFin) {
		this.datePanelFechaBusquedaFin = datePanelFechaBusquedaFin;
	}

	public JDatePickerImpl getDtFechaBusquedaFin() {
		return dtFechaBusquedaFin;
	}

	public void setDtFechaBusquedaFin(JDatePickerImpl dtFechaBusquedaFin) {
		this.dtFechaBusquedaFin = dtFechaBusquedaFin;
	}

	public JButton getBtnBuscar() {
		return btnBuscar;
	}

	public void setBtnBuscar(JButton btnBuscar) {
		this.btnBuscar = btnBuscar;
	}

	public JTable getTblRegistros() {
		return tblRegistros;
	}

	public void setTblRegistros(JTable tblRegistros) {
		this.tblRegistros = tblRegistros;
	}

	public RegistroModel getModelRegistros() {
		return modelRegistros;
	}

	public void setModelRegistros(RegistroModel modelRegistros) {
		this.modelRegistros = modelRegistros;
	}

	public String[] getColumnasRegistro() {
		return columnasRegistro;
	}

	public JButton getBtnAgregar() {
		return btnAgregar;
	}

	public void setBtnAgregar(JButton btnAgregar) {
		this.btnAgregar = btnAgregar;
	}

	public JButton getBtnEditar() {
		return btnEditar;
	}

	public void setBtnEditar(JButton btnEditar) {
		this.btnEditar = btnEditar;
	}

	public JButton getBtnVerDetalle() {
		return btnVerDetalle;
	}

	public void setBtnVerDetalle(JButton btnVerDetalle) {
		this.btnVerDetalle = btnVerDetalle;
	}
}
